Spring Cloud Security একটি স্প্রিং ক্লাউড লাইব্রেরি যা মাইক্রোসার্ভিস আর্কিটেকচারে সিকিউরিটি এবং অথেন্টিকেশন/অথোরাইজেশন সলিউশন প্রদান করে। এটি একটি বিস্তৃত সিকিউরিটি কনফিগারেশন প্রদান করে, যেমন OAuth2, JWT, সিঙ্গল সাইন-অন (SSO), এবং ক্লাউড-নেটিভ সিকিউরিটি ফিচারগুলির জন্য সমাধান। Spring Cloud Security ব্যবহৃত হলে, এটি একটি সেন্ট্রাল অথেন্টিকেশন সার্ভিসে সংযুক্ত হয় এবং মাইক্রোসার্ভিসগুলির মধ্যে নিরাপত্তা ব্যবস্থাপনা সহজ করে তোলে।
Spring Cloud Security ব্যবহার করার জন্য উদাহরণ
এখানে আমরা OAuth2 এবং JWT এর সাহায্যে একটি সিম্পল Spring Cloud Security ইনটিগ্রেশন উদাহরণ দেখব, যেখানে একটি API Gateway (Zuul) এর মাধ্যমে সেন্ট্রাল অথেন্টিকেশন সার্ভিসে (যেমন Keycloak) লোগইন প্রক্রিয়া পরিচালিত হবে।
ধাপ ১: Spring Cloud Security ডিপেনডেন্সি যোগ করা
আপনার Spring Cloud প্রজেক্টে OAuth2 বা JWT অথেন্টিকেশন সিস্টেম সক্রিয় করতে আপনাকে Spring Security এবং Spring Cloud Security লাইব্রেরি যুক্ত করতে হবে।
pom.xml (Spring Cloud Security):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
ধাপ ২: OAuth2 Configuration Setup
এই উদাহরণে আমরা OAuth2 প্রটোকল ব্যবহার করব, যেখানে একটি Authorization Server (যেমন Keycloak বা Authorization Server) ব্যবহার করে ক্লায়েন্ট অ্যাপ্লিকেশনে অথেন্টিকেশন সম্পন্ন হবে।
application.yml (API Gateway - Zuul)
API Gateway (Zuul) এ OAuth2 কনফিগারেশন:
spring:
security:
oauth2:
client:
registration:
keycloak:
client-id: your-client-id
client-secret: your-client-secret
scope: openid, profile, email
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
provider: keycloak
provider:
keycloak:
authorization-uri: https://keycloak-server/auth/realms/{realm}/protocol/openid-connect/auth
token-uri: https://keycloak-server/auth/realms/{realm}/protocol/openid-connect/token
user-info-uri: https://keycloak-server/auth/realms/{realm}/protocol/openid-connect/userinfo
এখানে Keycloak কে Authorization Server হিসেবে ব্যবহার করা হয়েছে, যেখানে client-id, client-secret, এবং redirect-uri দেয়া হয়েছে। এই কনফিগারেশনের মাধ্যমে Zuul API Gateway OAuth2 ক্লায়েন্ট হিসেবে কাজ করবে এবং Keycloak থেকে টোকেন গ্রহণ করবে।
ধাপ ৩: Feign Client এর মাধ্যমে SSO Integration
স্প্রিং ক্লাউড সিকিউরিটির সাহায্যে OAuth2 Authentication এর জন্য Feign Client ব্যবহার করা যেতে পারে।
Feign Client Interface (OAuth2 Client):
package com.example.feignclient.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "user-service")
public interface UserServiceClient {
@GetMapping("/api/users")
String getUsers();
}
OAuth2 Client API Gateway থেকে User Service এ সুরক্ষিত কল করবে।
Feign Client Configuration (Authorization Token পাঠানো):
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class OAuth2ClientService {
private final RestTemplate restTemplate;
private final OAuth2AuthenticationToken authenticationToken;
public OAuth2ClientService(RestTemplate restTemplate, OAuth2AuthenticationToken authenticationToken) {
this.restTemplate = restTemplate;
this.authenticationToken = authenticationToken;
}
public String fetchUsersFromService() {
String accessToken = authenticationToken.getCredentials().toString();
return restTemplate.getForObject("http://user-service/api/users?access_token=" + accessToken, String.class);
}
}
এখানে OAuth2AuthenticationToken ব্যবহার করা হচ্ছে অ্যাক্সেস টোকেন পেতে, যা ক্লায়েন্ট সার্ভিসে পাঠানো হবে।
ধাপ ৪: Security Configuration
এখন আমরা Spring Security কনফিগার করব যাতে API Gateway নিরাপদ থাকে এবং কেবলমাত্র অথেন্টিকেটেড ইউজাররা এক্সেস করতে পারে।
SecurityConfig.java (API Gateway - Zuul):
package com.example.apigateway.security;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.oauth2Login() // OAuth2 Login config
.and()
.authorizeRequests()
.antMatchers("/api/**").authenticated() // Protect all endpoints
.anyRequest().permitAll();
}
}
এখানে /api/** সব রিকোয়েস্টের জন্য authentication করা হচ্ছে। অর্থাৎ, কোনো ইউজার যিনি অথেন্টিকেটেড না, তিনি এই এন্ডপয়েন্টে অ্যাক্সেস করতে পারবেন না।
ধাপ ৫: Keycloak অথবা Authorization Server Setup
- Keycloak বা অন্য কোনো OAuth2 Authorization Server সেটআপ করুন।
- Client এবং Server কনফিগারেশন অনুযায়ী Client ID, Client Secret, Authorization URL, Token URL, এবং UserInfo URL প্রদান করুন।
ধাপ ৬: Application Run and Authentication
- Zuul API Gateway চলু করুন।
- ব্রাউজারে গিয়ে
http://localhost:8080এ কল করুন। - সিস্টেম আপনাকে Keycloak অথবা অন্য Authorization Server-এ লগইন করতে বলবে।
- লগইন সম্পন্ন হলে, অ্যাক্সেস টোকেন পেয়ে যাবেন এবং সিস্টেমে লগইন হয়ে যাবেন।
Spring Cloud Security-র সুবিধা:
- Centralized Authentication: OAuth2 / JWT Authentication দিয়ে ক্লাউড-নেটিভ অ্যাপ্লিকেশনের সুরক্ষা সহজ হয়।
- Single Sign-On (SSO): মাইক্রোসার্ভিসের মধ্যে সিঙ্গেল সাইন-অন সুবিধা দেওয়া হয়, যেখানে একবার লগইন করার পর সব সার্ভিস এক্সেস করা যায়।
- Token Management: OAuth2 এর মাধ্যমে JWT tokens ব্যবহার করা হয়, যা নিরাপত্তা এবং পারফরম্যান্স বৃদ্ধি করে।
- Flexible and Scalable: স্প্রিং ক্লাউড সিকিউরিটি খুবই স্কেলেবল এবং মাইক্রোসার্ভিস আর্কিটেকচারে সহজে ইন্টিগ্রেট করা যায়।
সারাংশ:
- Spring Cloud Security মাইক্রোসার্ভিস আর্কিটেকচারে সুরক্ষা এবং অথেন্টিকেশন সহজ করে।
- OAuth2, JWT এবং SSO এর মাধ্যমে মাইক্রোসার্ভিসগুলির মধ্যে সুরক্ষিত এবং স্কেলেবল সিস্টেম তৈরি করা সম্ভব।
- Zuul Gateway এর মাধ্যমে API গেটওয়ে হিসেবে একাধিক সার্ভিসের সুরক্ষা নিয়ন্ত্রণ করা যায়।
Read more